# Contributor: Bart Ribbers <bribbers@disroot.org>
# Maintainer: Duncan Bellamy <dunk@denkimushi.com>
pkgname=abseil-cpp
pkgver=20230802.1
pkgrel=0
pkgdesc="Abseil Common Libraries (C++) "
url="https://abseil.io/"
arch="all"
license="Apache-2.0"
depends_dev="linux-headers"
makedepends="
	$depends_dev
	cmake
	gtest-dev
	samurai
	"
checkdepends="tzdata"
subpackages="$pkgname-dev"
source="https://github.com/abseil/abseil-cpp/archive/$pkgver/abseil-cpp-$pkgver.tar.gz
	0002-abseil.patch
	"

_libs="
	atomic_hook_test_helper
	bad_any_cast_impl
	bad_optional_access
	bad_variant_access
	base
	city
	civil_time
	cord
	cord_internal
	cordz_functions
	cordz_handle
	cordz_info
	cordz_sample_token
	crc32c
	crc_cord_state
	crc_cpu_detect
	crc_internal
	debugging_internal
	demangle_internal
	die_if_null
	examine_stack
	exception_safety_testing
	exponential_biased
	failure_signal_handler
	flags
	flags_commandlineflag
	flags_commandlineflag_internal
	flags_config
	flags_internal
	flags_marshalling
	flags_parse
	flags_private_handle_accessor
	flags_program_name
	flags_reflection
	flags_usage
	flags_usage_internal
	graphcycles_internal
	hash
	hash_generator_testing
	hashtablez_sampler
	int128
	kernel_timeout_internal
	leak_check
	log_entry
	log_flags
	log_globals
	log_initialize
	log_internal_check_op
	log_internal_conditions
	log_internal_format
	log_internal_globals
	log_internal_log_sink_set
	log_internal_message
	log_internal_nullguard
	log_internal_proto
	log_internal_test_actions
	log_internal_test_helpers
	log_internal_test_matchers
	log_severity
	log_sink
	low_level_hash
	malloc_internal
	per_thread_sem_test_common
	periodic_sampler
	pow10_helper
	random_distributions
	random_internal_distribution_test_util
	random_internal_platform
	random_internal_pool_urbg
	random_internal_randen
	random_internal_randen_hwaes
	random_internal_randen_hwaes_impl
	random_internal_randen_slow
	random_internal_seed_material
	random_seed_gen_exception
	random_seed_sequences
	raw_hash_set
	raw_logging_internal
	scoped_mock_log
	scoped_set_env
	spinlock_test_common
	spinlock_wait
	stack_consumption
	stacktrace
	status
	statusor
	str_format_internal
	strerror
	string_view
	strings
	strings_internal
	symbolize
	synchronization
	test_instance_tracker
	throw_delegate
	time
	time_internal_test_util
	time_zone
	"

for _lib in $_libs; do
	subpackages="$subpackages $pkgname-${_lib//_/-}:abseillib"
done

build() {
	cmake -B build -G Ninja \
		-DCMAKE_CXX_STANDARD=17 \
		-DCMAKE_BUILD_TYPE=MinSizeRel \
		-DCMAKE_INSTALL_PREFIX=/usr \
		-DCMAKE_INSTALL_LIBDIR=lib \
		-DBUILD_SHARED_LIBS=ON \
		-DABSL_BUILD_TESTING=ON \
		-DABSL_BUILD_TEST_HELPERS=ON \
		-DABSL_USE_EXTERNAL_GOOGLETEST=ON \
		-DABSL_PROPAGATE_CXX_STD=ON \
		-DABSL_FIND_GOOGLETEST=ON
	cmake --build build
}

# disable broken tests
check() {
	CTEST_OUTPUT_ON_FAILURE=TRUE ctest --test-dir build -E "absl_str_format_convert_test|absl_mutex_test\
|absl_notification_test|absl_per_thread_sem_test|absl_sysinfo_test|absl_random_beta_distribution_test|absl_cord_rep_btree_navigator_test"
}

package() {
	DESTDIR="$pkgdir" cmake --install build
}

abseillib() {
	pkgdesc="Abseil Common C++ library: $subpkgname"

	local libname="${subpkgname#"$pkgname"-}"
	amove usr/lib/libabsl_${libname//-/_}.so.*
}

sha512sums="
14390380655c41483a98487e3b012110dd8d1743fdd68d8cde7e0d7c2730312d564b15726d8c9d2fff237d2fce3983bbbb5213f59612c7c6feaeb402dff9609f  abseil-cpp-20230802.1.tar.gz
aca4f4d89c38ca9038fdeb5b9e92c68d7ce0dda79f83335238f5e8de08c1a4d1e1ddd00e9ad6da18f0ab4ee22b58d73039f5523dc9311c7dbe1998f0f59a0e58  0002-abseil.patch
"
